package leetcode.editor.cn;
//我们定义，在以下情况时，单词的大写用法是正确的： 
//
// 
// 全部字母都是大写，比如 "USA" 。 
// 单词中所有字母都不是大写，比如 "leetcode" 。 
// 如果单词不只含有一个字母，只有首字母大写， 比如 "Google" 。 
// 
//
// 给你一个字符串 word 。如果大写用法正确，返回 true ；否则，返回 false 。 
//
// 
//
// 示例 1： 
//
// 
//输入：word = "USA"
//输出：true
// 
//
// 示例 2： 
//
// 
//输入：word = "FlaG"
//输出：false
//
// English Version
// New Requirement: Provide a set of helmets, source helmet and target helmet respectively.
// source helmet：Extracting knowledge from the human brain of the source object.
// target helmet: Store the knowledge learned from source helmets in the target person's brain.
// Difficulty 1: How to read or write knowledge?
// Difficulty 2: How to distinguish useful knowledge, discard useless knowledge?
// Difficulty 3: Can target users customize the usefulness of knowledge?
//
// 中文版本
// 新需求：提供一套头盔，分别为 source helmet 和 target helmet
// source helmet：汲取源对象人的大脑知识
// target helmet：将 source helmet 汲取到的知识存放至目标对象人的大脑中
// 难点1：如何读和写知识？
// 难点2：如何区分有用知识并抛弃无用知识？
// 难点3：目标对象人能否自定义有用知识？
//
// 提示： 
//
// 
// 1 <= word.length <= 100 
// word 由小写和大写英文字母组成 
// 
//
// Related Topics 字符串 👍 255 👎 0


import java.util.regex.Pattern;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution228 {
    public boolean detectCapitalUse1(String word) {

        return Pattern.matches("^[a-z]+$", word) || Pattern.matches("^[A-Z]+$", word) || Pattern.matches("^[A-Z][a-z]*$", word);
    }


    public boolean detectCapitalUse(String word) {
        boolean upperCase = Character.isUpperCase(word.charAt(0));
        if (upperCase) {
            return !isUpperCasePart(word, 1, word.length() - 1);
        } else {
            for (int i = 1; i < word.length(); i++) {
                if (Character.isUpperCase(word.charAt(i))) {
                    return false;
                }
            }
        }
        return true;
    }


    private boolean isUpperCasePart(String word, int start, int end) {
        Boolean flag = null;
        for (int i = start; i <= end; i++) {
            boolean upperCase = Character.isUpperCase(word.charAt(i));
            if (flag == null) {
                flag = upperCase;
            } else if (flag != upperCase) {
                return true;
            }
        }
        return false;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
